Lokal Stochastische Unabhänigkeit (https://files.eric.ed.gov/fulltext/EJf1224232.pdf).
Eindimmensionalität
Wenn nicht gegeben:
SEM
Dependency Matrix
Lokal stochastische Unabhängigkeit
Nach Kontrolle für die Personenfähigkeit korrelieren die Items nicht mehr. Der einzige Grund dafür, dass die Items zusammenhängen, ist also, dass die Antwort von diesem Konstrukt beeinflusst wird. Durch die Kontrolle für die Personenfähigkeit halten wir also den Fähigkeitswert konstant (alle Personen haben die gleiche Fähigkeit),
Abbildung
Einordnung: Lokale Unabhängigkeit, weitere Begriffe?
Beispiel
Linking
Problem
Das Problem
Invarianz-Eigenschaft von IRT: Itemparameter sind gleich über verschiedene Gruppen. Die Wahrscheinlichkeit für eine korrekte Antwort auf ein Item hängt also nur von \(\theta\) ab. Nicht von anderen Personen in der Stichprobe. Wie schaffen wir das aber, wenn wir anhand von verschiedenen Gruppen kalibrieren?
Die Lösung
Wir müssen die Werte, die wir aus diesen Kalibrierungen bekommen, irgendwie in einen Zusammenhang setzen.
Wiederholung: Kalibrierung
Die kalibrierten Itemparameter und Personenfähigkeiten gelten erst einmal nur für diese bestimmte Kombintation aus Items und Personen.
WARUM?
Wiederholung: Kalibrierung
Skala der Latenten Variable wird arbiträr festgelegt (meist auf einen Mittelwert von 0 und eine SD von 1)
Modell? sonst nicht idenfiziert.
Itemparameter dadurch nicht auf der selben Skala.
Sie können also nicht direkt miteinander verglichen werden.
Beispiel
Sie hängen ja von den latenten Variablen in der Stichprobe ab. Wenn wir eine sehr gute Stichprobe haben, und eine sehr schwache, dann werden trotzdem bei beiden der Mittelwert der Latenten Variable 0 und die SD 1 sein. Mittelschwere Items werden aber in der schwachen Gruppe eher positive Schwierigkeiten haben, in der starken Gruppe eher negative. (Beispiel nochmal genauer ausführen, evtl. mit Grafik, Ich hatte dazu etwas im ersten Buch, dass ich gelesen habe).
Beispiel
Group 1: \(\theta \sim N(0,1)\) Group 2: \(\theta \sim N(1, 1.4)\)
Für die Kalibrierung legen wir jetzt aber fest, dass gilt: Group 1: \(\theta \sim N(0,1)\) Group 2: \(\theta \sim N(0,1)\)
Beispiel
Simulieren von IRT Daten
Jetzt ist ein guter Zeitpunkt, und uns ein sehr mächtiges Werkzeug anzuschauen: Datensimulation.
Einerseits hilft es hoffentlich, die Konzepte hinter IRT und Linking noch besser zu verstehen.
An diesem Grundgerüst können wir jetzt verschiedene Anpassungen vornehmen, um ein paar Eigenschaften von Linking zu untersuchen.
Wir erinnern uns zurück: die Fähigkeitsverteilung wird bei der Kalibrierung auf eine Standardnormalverteilung gesetzt (\(\theta \sim N(0, 1)\)).
So hatten wir das auch in der Übung bereits simuliert. Wir können eine zweite Gruppe mit der selben Fähigkeitsverteilung simulieren, und uns anschauen, wie die Itemparameter \(\alpha\) und \(\beta\) geschätzt werden.
Zwei Gruppen
Das Vorgehen bleibt genauso wie in der Übung. Der einzige Unterschied ist: Wir simulieren noch eine neue Gruppe hinzu, und setzten dort die \(\theta\) Verteilung auf $N(1, 1).
Code zeigen
library(TAM)library(latex2exp) # Erlaubt es, Latex Syntax in ggplot zu nutzenset.seed(123)## 2PL Funktioncalc_2pl <-function(a, theta, xi){ p <- (exp(a*(theta - xi)))/(1+exp(a*(theta - xi))) return(p) }items <-data.frame(item_id =1:13, b =seq(-3, 3, by =0.5), a =seq(0.5, 1.5, length.out =13), c =rep(0, 13))n_subj <-100000## Als Objekt speichern, da so leichter Änderbar## Diesmal nehmen wir einfach 2 Gruppensubjects_1 <-data.frame(sub_id =1:n_subj,theta =c(rnorm(n_subj, 0, 1)), group =rep("1", n_subj))subjects_2 <-data.frame(sub_id = n_subj+1:n_subj*2, ## Andere Personen, deshalb andere IDtheta =c(rnorm(n_subj, 1, 1)), group =rep("2", n_subj))subjects <-rbind(subjects_1, subjects_2)sim_dat <-merge(subjects, items) %>%mutate(p =calc_2pl(a, theta, b)) %>%mutate(answer =rbinom(n =nrow(.), size =1, prob = p))sim_dat_2 <- sim_dat %>%select(item_id, sub_id, answer, group) %>%pivot_wider(names_from = item_id, values_from = answer, id_cols =c("group", "sub_id"))## Jetzt kalibrieren wir sie getrennt, als ob wir zwei verschiedene Sample hätten. ## Zuerst vorbereiten der Daten, d.h. die nicht benötigten Spalten entfernen und einen Datensatz pro Gruppe erzeugen. group_1_prep <- sim_dat_2 %>%filter(group =="1") %>%select(-group, -sub_id)group_2_prep <- sim_dat_2 %>%filter(group =="2") %>%select(-group, -sub_id)## Kalibrieren der beiden Gruppen getrenntgroup_1_2PL <-tam.mml.2pl(group_1_prep, irtmodel ="2PL")group_2_2PL <-tam.mml.2pl(group_2_prep, irtmodel ="2PL")# ## Extrahieren der Itemparameteritempars_1 <-as.data.frame(apply(group_1_2PL$item_irt[, c("alpha", "beta")], 2, round, 2))itempars_2 <-as.data.frame(apply(group_2_2PL$item_irt[, c("alpha", "beta")], 2, round, 2))colnames(itempars_2) <-c("alpha_2", "beta_2")
Plotten
Code zeigen
## Plottenparameters <-cbind(itempars_1, itempars_2)## Und weil ich das gleich noch ein paar mal brauche bastel ich mir mal eine Funktion draus:plot_group_pars <-function(dat, x, y){ ylab_char <-gsub("_2", "", deparse(substitute(y))) ## Automatically produce ylabelggplot(data = dat, aes(x = {{x}}, y = {{y}})) +geom_point() +geom_abline(intercept =0, slope =1) +xlim(-4, 4) +ylim(-4, 4) +theme_bw() +xlab(TeX(paste0("\\hat{\\", deparse(substitute(x)), "}_1"))) +ylab(TeX(paste0("\\hat{\\", ylab_char, "}_2")))}plot_group_pars(parameters, beta, beta_2) +labs(title ="Itemschwierigkeiten für zwei Gruppen", caption =TeX("\\theta_1 \\sim N(0,1), \\theta_2 \\sim N(1, 1)"))
Warum??
Diskriminationsparameter
Code zeigen
plot_group_pars(parameters, alpha, alpha_2) +labs(title ="Diskriminationsparameter für zwei Gruppen", caption =TeX("\\theta_1 \\sim N(0,1), \\theta_2 \\sim N(1, 1)"))
SimIRT
Übringes: es gibt natürlich auch schon R Pakete, die die Simulationsarbeit für uns übernehmen. Aus didaktischen Gründen haben wir das bisher selber gemacht, aber können uns jetzt ein bisschen Arbeit ersparen, und das ganze von dem Paket catIrt übernehmen lassen. Hier nochmal die gleiche Simulation, aber mit
library(catIrt)group_1 <-simIrt(theta =rnorm(100000, 0, 1), params =as.matrix(items[, c("a", "b", "c")]), mod ="brm")group_2 <-simIrt(theta =rnorm(100000, 0, 1.5), params =as.matrix(items[, c("a", "b", "c")]), mod ="brm")## Kalibrieren der beiden Gruppen getrenntgroup_1_2PL <-tam.mml.2pl(group_1$resp, irtmodel ="2PL")group_2_2PL <-tam.mml.2pl(group_2$resp, irtmodel ="2PL")## Extrahieren der Itemparameteritempars_1 <-as.data.frame(apply(group_1_2PL$item_irt[, c("alpha", "beta")], 2, round, 2))itempars_2 <-as.data.frame(apply(group_2_2PL$item_irt[, c("alpha", "beta")], 2, round, 2))colnames(itempars_2) <-c("alpha_2", "beta_2")
Plots zeigen
Code zeigen
parameters <-cbind(itempars_1, itempars_2)plot_group_pars(parameters, alpha, alpha_2) +labs(title ="Diskriminationsparameter für zwei Gruppen", caption =TeX("\\theta_1 \\sim N(0,1), \\theta_2 \\sim N(0, 1.5)"))
Schwierigkeit
Code zeigen
plot_group_pars(parameters, beta, beta_2) +labs(title ="Itemschwierigkeiten für zwei Gruppen", caption =TeX("\\theta_1 \\sim N(0,1), \\theta_2 \\sim N(0, 1.5)"))
Schlusfolgerung
Wir brauchen also einen Referenzrahmen um unsere Testergebnisse interpretieren zu können.
Das bedeutet auch, dass wir die Werte aus verschiedenen Kalibrierungen nicht direkt miteinander vergleichen können.
Lösung: Linking
Identifizirbarkeit
Beispiel
Linking/Equating
Szenario: Wir haben verschiedene Testformen, und wollen die Scores auf eine gemeinsame Skala bringen.
Dafür haben wir zwei Möglichkeiten:
Gemeinsame Items
Gemeinsame Personen
Abbildung z.B. mit Verteilung von theta scores, die nochmal zeigt was das Problem ist. Dann kann man bestimmte Items markieren, und die Verteilungen entsprechend dieser markierten Items verschieben.
Embretson 2000, S. 253
Item Parameter werden in beiden Tests geschätzt, und dann anhand der Ankeritems durch eine geeignete Transformation auf eine gemeinsame Skala gebracht.
Beispiel
Schulvergleichsstudien über die Jahre:
Itempools von Unternehmen, die Einstellungstests anbieten.
Ankeritems
Gemeinsame Items, die in beiden Testformen vorhanden sind.
Sollten keinen DIF haben.Genauer recherchieren: How to choose anchor items.
Ankeritems
Kallibrierungen der Parameterschätzer aus zwei verschiedenen Testformen werden auf eine gemeinsame Skala gebracht.
Wir müssen also die theta (\(\theta\)) scores des einen Tests so transformieren, dass sie auf einer gemeinsamen Skala mit den Scores des anderen Tests liegen:
\[
\theta_Y = A \theta_X + B
\]
Ankerpersonen
Personen bearbeiten beide Tests. Personenfähigkeit wird basierend auf einem Referenztest geschätzt, und dann fixiert und konstant gehalten, wenn andere Testformen bearbeitet werden. Die Fähigkeitswerte werden dann genutzt, um Itemparameter auf beiden Testformen zu schätzen.
Linking
\[
\theta* = x\theta+y
\]
…
Linking
Ziel: “Linking constants” \(x\) und \(y\) findend, welche die Item parameter aus den beiden Gruppen auf der selben Skala plazieren. Deutlich machen, für welche Art Modell nutzbar! Nochmal mit dem neueren Buch rübergehen, das geht noch mehr in die Tiefe.
Zwei häufige Methoden:
mean-sigma:
Annahme: Gemeinsame Ankeritems, oder Zwei Gruppen haben den genau gleichen Test bearbeitet. \[
B_B^* = x\beta_b=y
\]
\[
x = \frac{\sigma_A}{\sigma_B}
\]
\[
y = \overline{\beta}_A - x(\overline{\beta}_B)
\]
Und dann einsetzen in \[
\theta* = x\theta+y
\]
etc.
mal ausprobieren!
mean-sigma
Probleme: linking constants können stark von Outliern beeinflusst werden, und von den differential standards errors of the item difficutly estimates - Robust procedures exist.
Nur die item difficulty parameters werden zur berechnung der Linking constants genutzt.
Alternative: Characteristic curve methods
Characteristic curve methods
Versuch, die Linking constants so zu berechnen, dass die test charctersitic curves so ähnlich wie möglich sind. Nutzen daher alle item parameter um die Linking constants zu finden. computationally more expensive. Empirical research zeigt keine großen Unterschide zwischen beiden Methoden? Nochmal selber recherchiereen.
Gibt es neuere methoden? Z.B. Multi-group IRT, CFA framework …?
Beispiel
Im Embretson machen sie eine kleine Simulation. Könnten wir auch machen, entweder als aufgabe oder demonstrieren. - Man könnte die Linking constants setzen, gukcen was das mit den schwierikeiten macht, und die Simulierten Werte wieder rekapitulieren.
Messinvarianz/DIF
Das Problem
Funktionieren die Items in verschiedenen Gruppen (z.B. Geschlecht, Kultur, Fähigkeit …) auf dieselbe Art und Weise?
Gibt es also echte Mittelwertsunterschiede zwischen beiden Gruppen, oder sind die Unterschiede auf Besondere Interaktionen zwischen Items und Gruppen zurückzuführen?
DIF
Wenn wir das auf bestimmte Items anwenden, sprechen wir von Differential Item Functioning.
Raschtrees vorstellen? Ansonsten Embretson ab Linking auch gut.